home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Interactive 7
/
PC World Interactive 7.iso
/
program
/
qbprog.EXE
/
BLASTER.BAS
< prev
next >
Wrap
BASIC Source File
|
1995-09-27
|
24KB
|
1,114 lines
'Sadece QBX'de (versiyon 7.1) çalìƒìr.
'QBX /L BLASTER ƒeklinde yüklenmeli
DECLARE SUB Bekleme
DECLARE SUB Liste ()
DECLARE SUB Yaz (Bulunan$)
DECLARE FUNCTION Findfirst% (Ara$, YeniDTA$, BYVAL Fattr%)
DECLARE FUNCTION Findnext% (YeniDTA$)
DECLARE SUB SesDinle ()
DECLARE SUB SesKaydet ()
DECLARE SUB MikrofonKontrol ()
DECLARE SUB HareketliMenu ()
DECLARE SUB VeriAlma ()
DECLARE SUB Analiz ()
DECLARE SUB MakineSuratiniOlc ()
DECLARE SUB Kartara ()
DECLARE SUB AnaMenu ()
DECLARE SUB ArkaplanCiz ()
DECLARE SUB BuDiziniBul ()
DECLARE SUB CerceveCiz ()
DECLARE SUB EkranAyarla ()
DECLARE SUB Elveda ()
DECLARE SUB KomutYorumla ()
DECLARE SUB MesajYaz ()
DECLARE SUB SesDosyaTara ()
DECLARE SUB Kaydet
DECLARE SUB SBlaster
'AltYordamlarda paylaƒìlan deºerler
COMMON SHARED MenuYatay, MenuDikey, MenuGenis, MenuYuksek, MenuSecim$
COMMON SHARED EkranAdresi, Tus$, Mesaj$, Program$, Kapasite, Z, Dosya$, Dos$
COMMON SHARED Hata, Dizin$, Adet, Tercih$, Yatay
COMMON SHARED VerialYatay, VerialDikey, VerialBoy, Verial$, Veritipi
COMMON SHARED Sbase, MakineSurati
Kapasite = 56
DIM SHARED Sec$(Kapasite), Renk(10), Al$(3), Sec1$(10)
Program$ = "Bu Program, Programlama Sanatì için Gürol DEMÿR tarafìndan yapìlmìƒtìr."
ON ERROR GOTO Hatalar
ArkaplanCiz
Kartara
IF Sbase = 0 THEN
PCOPY 3, 0
Mesaj$ = "!Sistemde sblaster uyumlu ses kartì bulunamadì..."
MesajYaz
END
END IF
AnaMenu
Hatalar:
PCOPY 3, 0
Mesaj$ = "!Lütfen, bu hatayì bildirin...No:" + STR$(ERR)
MesajYaz
END
SUB Analiz
LOCATE 3, 1
COLOR Renk(5), Renk(6)
CLOSE #1
OPEN Dizin$ + Dosya$ FOR BINARY AS #1
A$ = SPACE$(20)
GET #1, , A$
IF A$ <> "Creative Voice File" + CHR$(&H1A) THEN Hata = 1: EXIT SUB
GET #1, , BaslamaYeri%
GET #1, , Versiyon%
GET #1, , Kontrol%
IF Versiyon% <> 4659 - Kontrol% THEN Hata = 1: EXIT SUB
LOCATE CSRLIN, 8
PRINT TAB(8); "╔"; STRING$(63, "═"); "╗"
Mesaj$ = "Dosya adì=" + Dosya$ + " , Büyüklük=" + LTRIM$(STR$(LOF(1))) + " byte"
GOSUB Mesaj
LOCATE CSRLIN, 8
PRINT TAB(8); "╠"; STRING$(63, "═"); "╣"
DO
GOSUB DataAl
IF BlokTipi = 1 OR BlokTipi = 2 THEN
IF Devam = 0 THEN
Devam = 1
SesBuyuk = 0
END IF
ELSE
IF Devam = 1 THEN
Devam = 0
Mesaj$ = " Ses bloku Boy=" + LTRIM$(STR$(SesBuyuk)) + " Byte, Frekans=" + LTRIM$(STR$(Ornekleme)) + " Hz, Paketleme=1:" + LTRIM$(STR$(Paket))
GOSUB Mesaj
END IF
END IF
SELECT CASE BlokTipi
CASE 1
GOSUB Blok1
CASE 2
GOSUB Blok2
CASE 3
GOSUB Blok3
CASE 4
GOSUB Blok4
CASE 5
GOSUB Blok5
CASE 6
GOSUB Blok6
CASE 7
GOSUB Blok7
CASE 0
EXIT DO
END SELECT
LOOP
Mesaj$ = " Dosya Sonu..."
GOSUB Mesaj
LOCATE CSRLIN, 8
PRINT TAB(8); "╚"; STRING$(63, "═"); "╝"
EXIT SUB
Mesaj:
Mesaj$ = "║ " + LEFT$(Mesaj$ + SPACE$(62), 62) + "║"
LOCATE CSRLIN, 8
PRINT Mesaj$
RETURN
DataAl:
A$ = " "
GET #1, , A$
BlokTipi = ASC(A$)
RETURN
BuyuklukAl:
Buyuk = 0
GOSUB DataAl
Buyuk = Buyuk + BlokTipi - 2
GOSUB DataAl
Buyuk = Buyuk + BlokTipi * 256
GOSUB DataAl
Buyuk = Buyuk + BlokTipi * 65536
RETURN
Oku:
IF Buyuk - Yer > 32000 THEN Uzunluk = 32000 ELSE Uzunluk = Buyuk - Yer
A$ = SPACE$(Uzunluk)
GET #1, , A$
Yer = Yer + Uzunluk
SesBuyuk = SesBuyuk + Uzunluk
IF Yer <> Buyuk THEN GOTO Oku
RETURN
Blok1:
GOSUB BuyuklukAl
GOSUB DataAl
Ornekleme = 1000000 \ (256 - BlokTipi)
GOSUB DataAl
Paket = 8 / (BlokTipi + 1)
Yer = 0
GOSUB Oku
RETURN
Blok2:
GOSUB BuyuklukAl
Yer = 0
GOSUB Oku
RETURN
Blok3:
GOSUB BuyuklukAl
GOSUB DataAl
SessizOrnekleme = 1000000 \ (256 - BlokTipi)
Mesaj$ = " Sessizlik bloºu boy=" + LTRIM$(STR$(Buyuk)) + " byte, frekans=" + LTRIM$(STR$(SessizOrnekleme)) + " Hz"
GOSUB Mesaj
RETURN
Blok4:
GOSUB BuyuklukAl
Marker = 0
GOSUB DataAl
Marker = Marker + BlokTipi
GOSUB DataAl
Marker = Marker + BlokTipi * 256
Mesaj$ = " Sürücü özel iƒareti, ÿƒaret=" + LTRIM$(STR$(Marker))
GOSUB Mesaj
RETURN
Blok5:
GOSUB BuyuklukAl
Mesaj$ = ""
DO
GOSUB DataAl
Mesaj$ = Mesaj$ + CHR$(BlokTipi)
IF BlokTipi = 0 THEN EXIT DO
LOOP
Mesaj$ = " ASCII Mesaj bloºu boy=" + LTRIM$(STR$(Buyuk)) + " byte, mesaj baƒì: " + LEFT$(Mesaj$ + SPACE$(20), 20)
GOSUB Mesaj
RETURN
Blok6:
GOSUB BuyuklukAl
Tekrar = 0
GOSUB DataAl
Tekrar = Tekrar + BlokTipi
GOSUB DataAl
Tekrar = Tekrar + BlokTipi * 256
Ek$ = LTRIM$(STR$(Tekrar)) + " adet"
IF Tekrar = 65535 THEN Ek$ = "Sonsuza kadar"
Mesaj$ = "*Tekrarlama baƒlangìcì, tekrarlama sayìsì=" + Ek$
GOSUB Mesaj
IF Tekrar > 15 AND Tus$ = "'" THEN
Mesaj$ = " ≈≈En fazla 15 tekrar dinlenecektir"
GOSUB Mesaj
END IF
RETURN
Blok7:
GOSUB BuyuklukAl
Mesaj$ = "*Tekrarlama Sonu.."
GOSUB Mesaj
RETURN
END SUB
SUB AnaMenu
BuDiziniBul
GOSUB IlkTarama
EkranYaz:
EkranAyarla
DEF SEG = 0: POKE 1050, PEEK(1052)
Secim:
DO
V3 = V + V2 * 14
IF V3 > Adet OR V3 > Kapasite THEN V2 = 0: V = 1: V3 = 1
Dosya$ = RTRIM$(Sec$(V3))
COLOR Renk(5), Renk(6)
GOSUB AktifResim
DO: A$ = INKEY$: LOOP UNTIL A$ <> ""
COLOR Renk(1), Renk(2)
GOSUB AktifResim
IF LEN(A$) = 2 THEN
Z = ASC(RIGHT$(A$, 1))
SELECT CASE Z
CASE 80
IF V < 14 THEN V = V + 1 ELSE IF V2 < 4 THEN V2 = V2 + 1: V = 1
CASE 72
IF V > 1 THEN V = V - 1 ELSE IF V2 > 0 THEN V2 = V2 - 1: V = 14
CASE 75
IF V2 > 0 THEN V2 = V2 - 1
CASE 77
IF V2 < 4 THEN V2 = V2 + 1
END SELECT
ELSE
Z = ASC(A$)
SELECT CASE Z
CASE 27
Elveda
CASE 13
IF INSTR(Sec$(V3), "<Dz>") = 0 THEN
GOTO Hareket
ELSE
IF INSTR(Sec$(V3), "Önceki") = 0 THEN
Dizin$ = Dizin$ + RTRIM$(LEFT$(Sec$(V3), 12)) + "\"
ELSE
S = 0
FOR I = LEN(Dizin$) TO 1 STEP -1
IF MID$(Dizin$, I, 1) = "\" THEN
IF S = 0 THEN S = 1 ELSE EXIT FOR
END IF
Dizin$ = LEFT$(Dizin$, I - 1)
NEXT
END IF
LOCATE 23, 16, 0
GOSUB IlkTarama
GOTO EkranYaz
END IF
CASE 242, 245
GOTO Hareket
CASE 243, 244
IF INSTR(Sec$(V3), "<Dz>") = 0 THEN
GOTO Hareket
END IF
END SELECT
END IF
LOOP
'Aktif Resim Dosyasìnì farklì renkte göster
AktifResim:
LOCATE 4 + V, 4 + V2 * 18
PRINT Sec$(V3)
RETURN
'ÿƒlem Rutini
Hareket:
KomutYorumla
IF Hata = 2 THEN GOSUB IlkTarama
GOTO EkranYaz
GOTO Secim
'ÿlk Tarama
IlkTarama:
SesDosyaTara
V = 1: V2 = 0
RETURN
END SUB
SUB ArkaplanCiz
EkranAdresi = &HB800
DEF SEG = 0
IF PEEK(&H449) = 7 THEN EkranAdresi = &HB000
Renk(1) = 1: 'Normal yazì
Renk(2) = 7
Renk(3) = 14: 'Menü adì
Renk(4) = 3
Renk(5) = 7: 'Aktif Satìr
Renk(6) = 1
Renk(7) = 15: 'Menü seçim rengi
Renk(8) = 7
Renk(9) = 4: 'Veri Rengi
Renk(10) = 7
Al$(0) = "QWERTYUIOPªÜASDFGHJKL₧ÿZXCVBNMÖÇ"
Al$(1) = "qwertyuìopºüasdfghjklƒizxcvbnmöç"
Al$(2) = "1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuopasdfghjklizxcvbnm:.\"
Al$(3) = "1234567890"
KEY 2, CHR$(242)
KEY 3, CHR$(243)
KEY 4, CHR$(244)
KEY 5, CHR$(245)
SCREEN , , 3, 0
COLOR 9, 7: CLS
A$ = "Programlama Sanatì..."
A = LEN(A$)
FOR I = 0 TO 1840 / A
B = 80 - C
IF B <= A THEN
PRINT LEFT$(A$, B);
PRINT RIGHT$(A$, A - B);
C = A - B: D = C
ELSE
PRINT A$;
C = C + A
END IF
NEXT
DEF SEG = EkranAdresi + 256 * 3
FOR I = 3680 + D * 2 TO 4000 STEP A * 2
FOR Y = 1 TO A
POKE I + (Y - 1) * 2, ASC(MID$(A$, Y, 1))
NEXT
NEXT
SCREEN , , 0
K = 0
FOR I = 1 TO LEN(Program$)
K = K + ASC(MID$(Program$, I, 1)) * I
NEXT
IF K <> 258646 THEN
PCOPY 3, 0
Mesaj$ = "1Programcìnìn ismine saygì duymak gerekmez mi?"
MesajYaz
END
END IF
END SUB
SUB BuDiziniBul
Dizin$ = CURDIR$
IF LEN(Dizin$) > 3 THEN Dizin$ = Dizin$ + "\"
END SUB
SUB CerceveCiz
COLOR Renk(1), Renk(2)
FOR I = 1 TO MenuYuksek - 1
LOCATE MenuYatay + I, MenuDikey: PRINT "║"; STRING$(MenuGenis, " "); "║"
NEXT
LOCATE MenuYatay, MenuDikey
PRINT "╔"; STRING$(MenuGenis, "═"); "╗"
LOCATE MenuYatay + MenuYuksek, MenuDikey
PRINT "╚"; STRING$(MenuGenis, "═"); "╝";
DEF SEG = EkranAdresi
FOR I = 1 TO MenuGenis + 1
POKE ((MenuYatay + MenuYuksek) * 160 + (MenuDikey + I) * 2 + 1), 9
NEXT
FOR I = 1 TO MenuYuksek + 1
TR = ((MenuYatay + I - 1) * 160 + (MenuDikey + MenuGenis + 1) * 2 + 1)
POKE TR, 9
POKE TR + 2, 9
NEXT
DEF SEG
LOCATE MenuYatay + MenuYuksek, MenuDikey + MenuGenis - LEN(Cer$) - 1
PRINT Cer$
COLOR Renk(3), Renk(4): LOCATE MenuYatay, MenuDikey + 3: PRINT Sec$(0)
END SUB
SUB EkranAyarla
PCOPY 3, 0
Sec$(0) = "Ana Menu"
MenuYatay = 2
MenuGenis = LEN(Dizin$) + 14
MenuDikey = 75 - MenuGenis
F = MenuDikey
MenuYuksek = 2
CerceveCiz
Sec$(0) = ""
MenuYatay = 4
MenuDikey = 2
MenuGenis = 73
MenuYuksek = 15
CerceveCiz
MenuYatay = 19
MenuYuksek = 2
CerceveCiz
COLOR Renk(1), Renk(2)
LOCATE 3, F + 1
PRINT "Aktif Dizin = "; Dizin$
LOCATE 4, F
PRINT "╩"
LOCATE 4, 76
PRINT "╣"
LOCATE 19, 2
PRINT "╠"
LOCATE 19, 76
PRINT "╣"
LOCATE 20, 8
PRINT "Sesi Dinle Kaydet Bilgi Al Dosya Sil MicroTest Çìkìƒ"
COLOR Renk(7), Renk(8)
LOCATE 20, 55
PRINT "F5"
LOCATE 20, 68
PRINT "Esc"
LOCATE 20, 3
PRINT "Enter"
LOCATE 20, 20
PRINT "F2"
LOCATE 20, 30
PRINT "F3"
LOCATE 20, 42
PRINT "F4"
COLOR Renk(1), Renk(2)
FOR I = 1 TO 14
LOCATE 4 + I, 3 + 1
PRINT Sec$(I)
LOCATE 4 + I, 21 + 1
PRINT Sec$(I + 14)
LOCATE 4 + I, 39 + 1
PRINT Sec$(I + 28)
LOCATE 4 + I, 57 + 1
PRINT Sec$(I + 42)
NEXT
END SUB
SUB Elveda
Cer$ = ""
Sec$(0) = "[ Ses Kayìt ve Dinleme Programì Ver-1.0]"
PCOPY 3, 0
MenuYatay = 2
MenuDikey = 3
MenuGenis = 73
MenuYuksek = 2
CerceveCiz
COLOR Renk(2), Renk(1)
FOR I = 7 TO 25: LOCATE I, 1: PRINT SPACE$(80); : NEXT
COLOR Renk(1), Renk(2)
LOCATE 3, 5
PRINT Program$
LOCATE 6, 1
END
END SUB
SUB HareketliMenu
CerceveCiz
FOR I = 1 TO MenuYuksek - 1
Yata = MenuYatay + I: G = I
RenkA = Renk(1): RenkB = Renk(2)
GOSUB AktifYaz
NEXT
Yatay = MenuYatay + 1
DO
G = Yatay - MenuYatay
Yata = Yatay: RenkA = Renk(5): RenkB = Renk(6): GOSUB AktifYaz
DO: Tus$ = INKEY$: LOOP UNTIL Tus$ <> ""
RenkA = Renk(1): RenkB = Renk(2): GOSUB AktifYaz
IF LEN(Tus$) = 2 THEN
Z = ASC(RIGHT$(Tus$, 1))
SELECT CASE Z
CASE 80
Yatay = Yatay + 1: IF Yatay = MenuYatay + MenuYuksek THEN Yatay = MenuYatay + 1
CASE 72
Yatay = Yatay - 1: IF Yatay = MenuYatay THEN Yatay = MenuYatay + MenuYuksek - 1
END SELECT
END IF
IF ASC(Tus$) = 27 THEN
Tus$ = ""
EXIT SUB
END IF
IF ASC(Tus$) = 13 THEN Yer = ASC(Sec1$(G)) + 1: Tus$ = MID$(Sec1$(G), Yer, 1)
V = INSTR(LEFT$(Al$(1), 34), Tus$)
IF V > 0 THEN Tus$ = MID$(Al$(0), V, 1)
V = INSTR(MenuSecim$, Tus$)
IF V > 0 THEN Yatay = MenuYatay + V: EXIT SUB
LOOP
AktifYaz:
LOCATE Yata, MenuDikey + 1
COLOR RenkA, RenkB
PRINT MID$(Sec1$(G), 2, LEN(Sec1$(G)) - 1)
Yer = ASC(Sec1$(G)) + 1
LOCATE Yata, MenuDikey + 1 + Yer - 2
COLOR Renk(7)
PRINT MID$(Sec1$(G), Yer, 1)
RETURN
END SUB
SUB Kartara
DIM Adres(6)
Adres(1) = &H210
Adres(2) = &H220
Adres(3) = &H230
Adres(4) = &H240
Adres(5) = &H250
Adres(6) = &H260
FOR I = 1 TO 6
GOSUB Seskartara
NEXT
EXIT SUB
Seskartara:
TABAN = Adres(I)
GOSUB SesKartTetikle
GOSUB SesKartVarveyaYok
IF Var = 1 THEN Sbase = TABAN
RETURN
SesKartTetikle:
'ÿlk deºerler gönderiliyor
A = INP(TABAN + &HE)
OUT TABAN + 6, 1
A = INP(TABAN + 6)
A = INP(TABAN + 6)
A = INP(TABAN + 6)
OUT TABAN + 6, 0
RETURN
SesKartVarveyaYok:
Var = 0
FOR Y3 = 1 TO 10
IF INP(TABAN + &HE) AND 128 <> 0 THEN
IF INP(TABAN + &HA) = 170 THEN
Var = 1
EXIT FOR
END IF
END IF
NEXT Y3
RETURN
END SUB
SUB KomutYorumla
Hata = 0
PCOPY 3, 0
IF Z = 13 THEN
Tus$ = "'"
Analiz
Tus$ = ""
IF Hata = 0 THEN
SesDinle
END IF
END IF
IF Z = 242 THEN
SesKaydet
END IF
IF Z = 243 THEN
Analiz
IF Hata = 0 THEN DO: LOOP UNTIL INKEY$ <> ""
END IF
IF Z = 244 THEN
Mesaj$ = "2" + Dosya$ + " silinsin mi? E)vet, H)ayìr"
MesajYaz
IF Tercih$ = "E" THEN
CLOSE #1
KILL Dizin$ + Dosya$
Hata = 2
END IF
END IF
IF Z = 245 THEN
MikrofonKontrol
IF Hata = 0 THEN DO: LOOP UNTIL INKEY$ <> ""
END IF
IF Hata = 1 THEN
Mesaj$ = "1" + Dosya$ + " bir ses dosyasì deºil!!"
MesajYaz
END IF
END SUB
SUB Liste STATIC
'Verilen dizine geç
Mevcut$ = CURDIR$
CHDIR "\"
Diz$ = "\"
IF LEN(Dizin$) > 3 THEN Diz$ = MID$(Dizin$, 3, LEN(Dizin$) - 3)
CHDIR Diz$
'Ara
Dtabuf$ = SPACE$(43)
Sonuc = Findfirst%("*.*" + CHR$(0), Dtabuf$, &H37)
WHILE Sonuc
CALL Yaz(Dtabuf$)
Sonuc = Findnext%(Dtabuf$)
WEND
Dtabuf$ = ""
'Eski dizine geç
CHDIR Mevcut$
END SUB
SUB MakineSuratiniOlc
DEF SEG = &HB900
POKE 0, 0
POKE 1, 0
POKE 2, 0
POKE 3, 0
Bekleme
'Her ihtimale karƒì Degisken=? hìz kontrol
Degisken = 140
MakineSurati = Degisken * (PEEK(0) + PEEK(1) * 256 + (PEEK(2) + PEEK(3) * 256) * 65000)
END SUB
SUB MesajYaz
PCOPY 0, 2
LOCATE , , 0
M1 = 11
M3 = LEN(Mesaj$) + 1
M2 = FIX((80 - M3) / 2)
M4 = 2
COLOR Renk(1), Renk(2)
FOR I = 1 TO M4 - 1
LOCATE M1 + I, M2
PRINT "║"; STRING$(M3, " "); "║"
NEXT
LOCATE M1, M2
PRINT "╔"; STRING$(M3, "═"); "╗"
LOCATE M1 + M4, M2
PRINT "╚"; STRING$(M3, "═"); "╝";
DEF SEG = EkranAdresi
FOR I = 1 TO M3 + 1
A = ((M1 + M4) * 160 - 1 + (M2 + I) * 2 + 1)
POKE A + 1, 9
NEXT
FOR I = 1 TO M4 + 1
TR = ((M1 + I - 1) * 160 + (M2 + M3 + 1) * 2 + 1)
POKE TR, 9: POKE TR + 2, 9
NEXT
DEF SEG
DO
LOCATE M1 + 1, M2 + 2: PRINT RIGHT$(Mesaj$, M3 - 2)
IF ASC(Mesaj$) < 34 THEN EXIT DO
PLAY "O2L8DP64"
DO: Tercih$ = INKEY$: LOOP UNTIL Tercih$ <> ""
IF ASC(Mesaj$) = 49 THEN EXIT DO
SELECT CASE Tercih$
CASE "E", "e"
Tercih$ = "E"
EXIT DO
CASE "H", "h", CHR$(27)
EXIT DO
END SELECT
LOOP
IF ASC(Mesaj$) <> 33 THEN PCOPY 2, 0
END SUB
SUB MikrofonKontrol
Sec$(0) = "Mikrofon Test"
MenuYatay = 3
MenuDikey = 6
MenuGenis = 66
MenuYuksek = 17
CerceveCiz
COLOR Renk(1), Renk(2)
Y = 7
DO
IF INP(&H60) = 1 THEN EXIT DO
OUT Sbase + 12, 32
A = INP(Sbase + 10)
A = FIX(A / 11)
IF A > 11 THEN C = 1 ELSE C = -1
IF A = 11 THEN B$ = CHR$(196) ELSE B$ = CHR$(219)
FOR I = 11 TO A STEP C
LOCATE I, Y
K = SCREEN(I, Y)
IF K = 32 OR K = 196 THEN PRINT B$
NEXT
Y = Y + .0625
IF Y > 72 THEN
Y = 7
FOR I = 4 TO 19
LOCATE I, 7
PRINT SPACE$(66)
NEXT
END IF
LOOP
END SUB
SUB SesDinle
Blok$ = ""
MakineSuratiniOlc
Port = Sbase + 12
OUT Port, &HD1
DinleDosya$ = Dizin$ + Dosya$
CLOSE #1
OPEN DinleDosya$ FOR BINARY AS #1
A$ = SPACE$(20)
GET #1, , A$
GET #1, , BaslamaYeri%
GET #1, , Versiyon%
GET #1, , Kontrol%
A$ = " "
GET #1, BaslamaYeri%, A$
GOSUB DosyaAnaliz
DEF SEG = &HB900
REDIM A%(32766)
C = VARSEG(A%(0))
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
POKE 0, bl8
POKE 1, bl7
C = VARPTR(A%(0))
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
POKE 2, bl8
POKE 3, bl7
C = Port
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
POKE 4, bl8
POKE 5, bl7
C = LEN(Blok$) + 100
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
POKE 8, 100
POKE 9, 0
POKE 10, bl8
POKE 11, bl7
FOR I = 1 TO LEN(DinleDosya$)
POKE 29 + I, ASC(MID$(DinleDosya$, I, 1))
POKE 30 + I, 0
NEXT
FOR I = 1 TO LEN(Blok$)
POKE 99 + I, ASC(MID$(Blok$, I, 1))
FOR Y = 1 TO 8
POKE 100 + I + Y, 0
NEXT
NEXT
Mesaj$ = "!" + Dosya$ + " çalìnìyor....Esc)Bitir"
MesajYaz
SBlaster
A$ = INKEY$
EXIT SUB
DosyaAnaliz:
DO
GOSUB Dataal2
SELECT CASE BlokTipi
CASE 1
GOSUB b2lok1
CASE 2
GOSUB b2lok2
CASE 3
GOSUB b2lok3
CASE 4
GOSUB b2lok4
CASE 5
GOSUB b2lok5
CASE 6
GOSUB b2lok6
CASE 7
GOSUB b2lok7
CASE 0
EXIT DO
END SELECT
LOOP
RETURN
Dataal2:
A$ = " "
GET #1, , A$
BlokTipi = ASC(A$)
RETURN
buyuklukal2:
Buyuk = 0
GOSUB Dataal2
Buyuk = Buyuk + BlokTipi - 2
GOSUB Dataal2
Buyuk = Buyuk + BlokTipi * 256
GOSUB Dataal2
Buyuk = Buyuk + BlokTipi * 65536
RETURN
oku22:
Yer2 = LOC(1)
oku11:
IF Buyuk - Yer > 54000 THEN Uzunluk = 54000 ELSE Uzunluk = Buyuk - Yer
OrnekRate = (MakineSurati / Ornekleme) * Paket
Bl1 = FIX(LOC(1) / 65536)
Bl2 = LOC(1) - Bl1 * 65536
C = Bl1
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
Blok$ = Blok$ + CHR$(bl8) + CHR$(bl7)
C = Bl2
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
Blok$ = Blok$ + CHR$(bl8) + CHR$(bl7)
C = Uzunluk
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
Blok$ = Blok$ + CHR$(bl8) + CHR$(bl7)
C = OrnekRate
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
Blok$ = Blok$ + CHR$(bl8) + CHR$(bl7)
Yer2 = Yer2 + Uzunluk
A$ = " "
GET #1, Yer2, A$
Yer = Yer + Uzunluk
IF INP(&H60) = 1 THEN RETURN
IF Yer <> Buyuk THEN GOTO oku22
RETURN
b2lok1:
GOSUB buyuklukal2
GOSUB Dataal2
Ornekleme = 1000000 \ (256 - BlokTipi)
GOSUB Dataal2
Paket1 = 8 / (BlokTipi + 1)
Paket = BlokTipi + 1
Yer = 0
GOSUB oku22
RETURN
b2lok2:
GOSUB buyuklukal2
Yer = 0
GOSUB oku22
RETURN
b2lok3:
GOSUB buyuklukal2
GOSUB Dataal2
SessizOrnekleme = 1000000 \ (256 - BlokTipi)
'Sessizlik bloºu dikkate alìnmamìƒtìr
RETURN
b2lok4:
GOSUB buyuklukal2
Marker = 0
GOSUB Dataal2
Marker = Marker + BlokTipi
GOSUB Dataal2
Marker = Marker + BlokTipi * 256
RETURN
b2lok5:
GOSUB buyuklukal2
Mesaj$ = ""
DO
GOSUB Dataal2
Mesaj$ = Mesaj$ + CHR$(BlokTipi)
IF BlokTipi = 0 THEN EXIT DO
LOOP
'RTRIM$(LEFT$(Mesaj$ + SPACE$(30), 30)); " ƒeklinde baƒlayan mesaja rastlandì.."
RETURN
b2lok6:
GOSUB buyuklukal2
Tekrar = 0
GOSUB Dataal2
Tekrar = Tekrar + BlokTipi
GOSUB Dataal2
Tekrar = Tekrar + BlokTipi * 256
IF Tekrar > 15 THEN
Tekrar = 15
'En fazla 15 tekrar yapìlmasìna müsaade edilecektir.
END IF
Nerden = LOC(1)
RETURN
b2lok7:
GOSUB buyuklukal2
IF Tekrar <> 65535 THEN Tekrar = Tekrar - 1
IF Tekrar > 0 THEN
A$ = " "
GET #1, Nerden, A$
GOSUB DosyaAnaliz
END IF
RETURN
END SUB
SUB SesDosyaTara
PCOPY 3, 0
FOR I = 1 TO Kapasite
Sec$(I) = ""
NEXT
IF LEN(Dizin$) > 3 THEN
Adet = 1
Sec$(1) = "Önceki... <Dz>"
ELSE
Adet = 0
END IF
CALL Liste
END SUB
SUB SesKaydet
MakineSuratiniOlc
Sec$(0) = "Ornekleme Hìzì"
Sec1$(1) = CHR$(12) + " Saniyede 3900 byte "
Sec1$(2) = CHR$(11) + " Saniyede 6000 byte "
Sec1$(3) = CHR$(11) + " Saniyede 8000 byte "
Sec1$(4) = CHR$(12) + " Saniyede 10000 byte "
Sec1$(5) = CHR$(11) + " Saniyede 11000 byte "
Sec1$(6) = CHR$(12) + " Saniyede 12000 byte "
Sec1$(7) = CHR$(12) + " Saniyede 13000 byte "
Sec1$(8) = CHR$(12) + " Saniyede 14000 byte "
Sec1$(9) = CHR$(12) + " Saniyede 15000 byte "
Sec1$(10) = CHR$(2) + " Klavyeden giriƒ "
MenuYatay = 4
MenuDikey = 29
MenuGenis = 21
MenuYuksek = 11
MenuSecim$ = "968012345K"
HareketliMenu
Frekans = VAL(MID$(Sec1$(Yatay - MenuYatay), 12, 5))
IF Tus$ = "" THEN EXIT SUB
IF Frekans = 0 THEN
Sec$(0) = "Hìz"
MenuYatay = 17
MenuDikey = 35
MenuGenis = 7
MenuYuksek = 2
CerceveCiz
VerialYatay = 18
VerialDikey = 37
Verial$ = ""
Veritipi = 2
VerialBoy = 5
VeriAlma
Frekans = VAL(Verial$)
IF Frekans < 3900 OR Frekans > 42500 THEN EXIT SUB
IF Z = 27 THEN EXIT SUB
END IF
Sec$(0) = "Dosya Adì"
MenuYatay = 17
MenuDikey = 5
MenuGenis = 66
MenuYuksek = 2
CerceveCiz
VerialYatay = 18
VerialDikey = 7
Verial$ = LEFT$(Dizin$ + SPACE$(64), 64)
Veritipi = 2
VerialBoy = 64
VeriAlma
Verial$ = RTRIM$(Verial$)
IF INSTR(Verial$, ".") = 0 THEN Verial$ = Verial$ + ".VOC"
IF Z = 27 THEN EXIT SUB
KayDosya$ = Verial$
Mesaj$ = "!" + Verial$ + " kaydediliyor....Esc)Bitir"
MesajYaz
CLOSE #1
OPEN KayDosya$ FOR BINARY AS #1
IF LOF(1) <> 0 THEN
Mesaj$ = "2Bu isimde dosya var üzerine yazìlsìn mì? E)vet H)ayìr"
MesajYaz
IF Tercih$ <> "E" THEN EXIT SUB
CLOSE #1
KILL KayDosya$
END IF
CLOSE #1
Bekle = MakineSurati / Frekans
REDIM A%(32766)
DEF SEG = &HB900
C = VARSEG(A%(0))
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
POKE 4, bl8
POKE 5, bl7
C = VARPTR(A%(0))
bl7 = FIX(C / 256)
bl8 = C - bl7 * 256
POKE 6, bl8
POKE 7, bl7
FOR I = 1 TO LEN(KayDosya$)
POKE I + 9, ASC(MID$(KayDosya$, I, 1))
NEXT
POKE I + 9, 0
POKE 1, FIX(Bekle / 256)
POKE 0, Bekle - PEEK(1) * 256
POKE 3, FIX(Sbase / 256)
POKE 2, Sbase - PEEK(3) * 256
Kaydet
CLOSE #1
OPEN KayDosya$ FOR BINARY AS #1
A$ = CHR$(0)
PUT #1, LOF(1) + 1, A$
A = LOF(1) - 31
Uc = FIX(A / 65536)
iki = FIX((A - Uc * 65536) / 256)
bir = A - Uc * 65536 - iki * 256
A$ = "Creative Voice File" + CHR$(&H1A) + CHR$(&H1A) + CHR$(0) + CHR$(&HA) + CHR$(1) + CHR$(&H29) + CHR$(&H11)
A$ = A$ + CHR$(1) + CHR$(bir) + CHR$(iki) + CHR$(Uc) + CHR$(256 - 1000000 / Frekans) + CHR$(0)
PUT #1, 1, A$
Hata = 2
END SUB
SUB VeriAlma
IF Verial$ = "" THEN Verial$ = SPACE$(VerialBoy)
F = LEN(RTRIM$(Verial$)) + 1: G = 1
DO
LOCATE VerialYatay, VerialDikey
COLOR Renk(5), Renk(6)
IF F > VerialBoy THEN F = VerialBoy: G = 0
PRINT Verial$
LOCATE VerialYatay, VerialDikey + F - 1, 1
IF JL = 1 THEN LOCATE , , , 4, 7 ELSE LOCATE , , , 6, 7
DEF SEG = 0: POKE 1050, PEEK(1052)
DO: Tus$ = INKEY$: LOOP UNTIL Tus$ <> ""
IF LEN(Tus$) = 2 THEN
Z = ASC(RIGHT$(Tus$, 1))
SELECT CASE Z
CASE 77
F = F + 1
CASE 75
IF F > 1 THEN F = F - 1
CASE 83
Verial$ = LEFT$(Verial$, F - 1) + RIGHT$(Verial$, VerialBoy - F) + " "
CASE 82
IF JL = 0 THEN JL = 1 ELSE JL = 0
CASE 80, 72
EXIT DO
END SELECT
ELSE
Z = ASC(Tus$)
SELECT CASE Z
CASE 27, 13
EXIT DO
CASE ELSE
IF Z = 8 THEN
IF F > 1 THEN
F = F - 1
Verial$ = LEFT$(Verial$, F - 1) + RIGHT$(Verial$, VerialBoy - F) + " "
END IF
ELSE
Normal = 0
IF INSTR(Al$(Veritipi), Tus$) > 0 THEN Normal = 1
IF Normal = 1 THEN
IF JL = 1 THEN MID$(Verial$, F, 1) = Tus$ ELSE Verial$ = LEFT$(Verial$, F - 1) + Tus$ + MID$(Verial$, F, VerialBoy - F)
F = F + 1
ELSE
PLAY "O2L8DP64"
END IF
END IF
END SELECT
END IF
LOOP
LOCATE , , 0
END SUB
SUB Yaz (Bulunan$) STATIC
IF Adet = Kapasite THEN EXIT SUB
A$ = MID$(Bulunan$, 31, INSTR(31, Bulunan$, CHR$(0)) - 31)
IF (ASC(MID$(Bulunan$, 22, 4)) AND &H10) AND LEFT$(A$, 1) <> "." THEN
Adet = Adet + 1
Sec$(Adet) = LEFT$(A$ + SPACE$(12), 12) + "<Dz>"
ELSE
IF INSTR(A$, ".VOC") > 0 THEN
Adet = Adet + 1
Sec$(Adet) = A$
END IF
END IF
END SUB